// 110. 平衡二叉树
// 给定一个二叉树，判断它是否是高度平衡的二叉树。

// 本题中，一棵高度平衡二叉树定义为：

// 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
// 思路：递归
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
 var isBalanced = function(root) {
    if(root===null) return true;
    //还是用递归三部曲 + 后序遍历 左右中 当前左子树右子树高度相差大于1就返回-1
    // 1. 确定递归函数参数以及返回值
    const def=function(root){
        // 2. 确定递归函数终止条件
        if(root==null) return 0;
        // 3. 确定单层递归逻辑
        let leftNums=def(root.left);//左子树高度
        // 当判定左子树不为平衡二叉树时,即可直接返回-1
        if(leftNums==-1) return -1;
        let rightNums=def(root.right);//右子树高度
        // 当判定右子树不为平衡二叉树时,即可直接返回-1
        if(rightNums==-1) return -1;
        let res=Math.abs(leftNums-rightNums)>1?-1:1+Math.max(leftNums,rightNums);
        return res;
    }
    let ans=def(root);
    return ans==-1?false:true;
};
123